import enum
import typing as T
from dataclasses import dataclass


class StatType(enum.Enum):
    strength = "STR"
    condition = "CON"
    dexterity = "DEX"
    intelligence = "INT"
    wisdom = "WIS"
    charisma = "CHA"
    hp_max = "HP Max"
    mp_max = "MP Max"


class EquipmentType(enum.Enum):
    weapon = "Weapon"
    shield = "Shield"
    helm = "Helm"
    hauberk = "Hauberk"
    brassairts = "Brassairts"
    vambraces = "Vambraces"
    gauntlets = "Gauntlets"
    gambeson = "Gambeson"
    cuisses = "Cuisses"
    greaves = "Greaves"
    sollerets = "Sollerets"


PRIME_STATS = [
    StatType.strength,
    StatType.condition,
    StatType.dexterity,
    StatType.intelligence,
    StatType.wisdom,
    StatType.charisma,
]

ALL_STATS = PRIME_STATS + [StatType.hp_max, StatType.mp_max]


SPELLS = [
    "Slime Finger",
    "Rabbit Punch",
    "Hastiness",
    "Good Move",
    "Sadness",
    "Seasick",
    "Shoelaces",
    "Inoculate",
    "Cone of Annoyance",
    "Magnetic Orb",
    "Invisible Hands",
    "Revolting Cloud",
    "Aqueous Humor",
    "Spectral Miasma",
    "Clever Fellow",
    "Lockjaw",
    "History Lesson",
    "Hydrophobia",
    "Big Sister",
    "Cone of Paste",
    "Mulligan",
    "Nestor's Bright Idea",
    "Holy Batpole",
    "Tumor (Benign)",
    "Braingate",
    "Summon a Bitch",
    "Nonplus",
    "Animate Nightstand",
    "Eye of the Troglodyte",
    "Curse Name",
    "Dropsy",
    "Vitreous Humor",
    "Roger's Grand Illusion",
    "Covet",
    "Black Idaho",
    "Astral Miasma",
    "Spectral Oyster",
    "Acrid Hands",
    "Angioplasty",
    "Grognor's Big Day Off",
    "Tumor (Malignant)",
    "Animate Tunic",
    "Ursine Armor",
    "Holy Roller",
    "Tonsillectomy",
    "Curse Family",
    "Infinite Confusion",
]


@dataclass
class Modifier:
    name: str
    quality: int


OFFENSE_ATTRIB = [
    Modifier("Polished", 1),
    Modifier("Serrated", 1),
    Modifier("Heavy", 1),
    Modifier("Pronged", 2),
    Modifier("Steely", 2),
    Modifier("Vicious", 3),
    Modifier("Venomed", 4),
    Modifier("Stabbity", 4),
    Modifier("Dancing", 5),
    Modifier("Invisible", 6),
    Modifier("Vorpal", 7),
]

DEFENSE_ATTRIB = [
    Modifier("Studded", 1),
    Modifier("Banded", 2),
    Modifier("Gilded", 2),
    Modifier("Festooned", 3),
    Modifier("Holy", 4),
    Modifier("Cambric", 1),
    Modifier("Fine", 4),
    Modifier("Impressive", 5),
    Modifier("Custom", 3),
]

OFFENSE_BAD = [
    Modifier("Dull", -2),
    Modifier("Tarnished", -1),
    Modifier("Rusty", -3),
    Modifier("Padded", -5),
    Modifier("Bent", -4),
    Modifier("Mini", -4),
    Modifier("Rubber", -6),
    Modifier("Nerf", -7),
    Modifier("Unbalanced", -2),
]

DEFENSE_BAD = [
    Modifier("Holey", -1),
    Modifier("Patched", -1),
    Modifier("Threadbare", -2),
    Modifier("Faded", -1),
    Modifier("Rusty", -3),
    Modifier("Motheaten", -3),
    Modifier("Mildewed", -2),
    Modifier("Torn", -3),
    Modifier("Dented", -3),
    Modifier("Cursed", -5),
    Modifier("Plastic", -4),
    Modifier("Cracked", -4),
    Modifier("Warped", -3),
    Modifier("Corroded", -3),
]


@dataclass
class EquipmentPreset:
    name: str
    quality: int


SHIELDS = [
    EquipmentPreset("Parasol", 0),
    EquipmentPreset("Pie Plate", 1),
    EquipmentPreset("Garbage Can Lid", 2),
    EquipmentPreset("Buckler", 3),
    EquipmentPreset("Plexiglass", 4),
    EquipmentPreset("Fender", 4),
    EquipmentPreset("Round Shield", 5),
    EquipmentPreset("Carapace", 5),
    EquipmentPreset("Scutum", 6),
    EquipmentPreset("Propugner", 6),
    EquipmentPreset("Kite Shield", 7),
    EquipmentPreset("Pavise", 8),
    EquipmentPreset("Tower Shield", 9),
    EquipmentPreset("Baroque Shield", 11),
    EquipmentPreset("Aegis", 12),
    EquipmentPreset("Magnetic Field", 18),
]

ARMORS = [
    EquipmentPreset("Lace", 1),
    EquipmentPreset("Macrame", 2),
    EquipmentPreset("Burlap", 3),
    EquipmentPreset("Canvas", 4),
    EquipmentPreset("Flannel", 5),
    EquipmentPreset("Chamois", 6),
    EquipmentPreset("Pleathers", 7),
    EquipmentPreset("Leathers", 8),
    EquipmentPreset("Bearskin", 9),
    EquipmentPreset("Ringmail", 10),
    EquipmentPreset("Scale Mail", 12),
    EquipmentPreset("Chainmail", 14),
    EquipmentPreset("Splint Mail", 15),
    EquipmentPreset("Platemail", 16),
    EquipmentPreset("ABS", 17),
    EquipmentPreset("Kevlar", 18),
    EquipmentPreset("Titanium", 19),
    EquipmentPreset("Mithril Mail", 20),
    EquipmentPreset("Diamond Mail", 25),
    EquipmentPreset("Plasma", 30),
]

WEAPONS = [
    EquipmentPreset("Stick", 0),
    EquipmentPreset("Broken Bottle", 1),
    EquipmentPreset("Shiv", 1),
    EquipmentPreset("Sprig", 1),
    EquipmentPreset("Oxgoad", 1),
    EquipmentPreset("Eelspear", 2),
    EquipmentPreset("Bowie Knife", 2),
    EquipmentPreset("Claw Hammer", 2),
    EquipmentPreset("Handpeen", 2),
    EquipmentPreset("Andiron", 3),
    EquipmentPreset("Hatchet", 3),
    EquipmentPreset("Tomahawk", 3),
    EquipmentPreset("Hackbarm", 3),
    EquipmentPreset("Crowbar", 4),
    EquipmentPreset("Mace", 4),
    EquipmentPreset("Battleadze", 4),
    EquipmentPreset("Leafmace", 5),
    EquipmentPreset("Shortsword", 5),
    EquipmentPreset("Longiron", 5),
    EquipmentPreset("Poachard", 5),
    EquipmentPreset("Baselard", 5),
    EquipmentPreset("Whinyard", 6),
    EquipmentPreset("Blunderbuss", 6),
    EquipmentPreset("Longsword", 6),
    EquipmentPreset("Crankbow", 6),
    EquipmentPreset("Blibo", 7),
    EquipmentPreset("Broadsword", 7),
    EquipmentPreset("Kreen", 7),
    EquipmentPreset("Warhammer", 7),
    EquipmentPreset("Morning Star", 8),
    EquipmentPreset("Pole-adze", 8),
    EquipmentPreset("Spontoon", 8),
    EquipmentPreset("Bastard Sword", 9),
    EquipmentPreset("Peen-arm", 9),
    EquipmentPreset("Culverin", 10),
    EquipmentPreset("Lance", 10),
    EquipmentPreset("Halberd", 11),
    EquipmentPreset("Poleax", 12),
    EquipmentPreset("Bandyclef", 15),
]

SPECIALS = [
    "Diadem",
    "Festoon",
    "Gemstone",
    "Phial",
    "Tiara",
    "Scabbard",
    "Arrow",
    "Lens",
    "Lamp",
    "Hymnal",
    "Fleece",
    "Laurel",
    "Brooch",
    "Gimlet",
    "Cobble",
    "Albatross",
    "Brazier",
    "Bandolier",
    "Tome",
    "Garnet",
    "Amethyst",
    "Candelabra",
    "Corset",
    "Sphere",
    "Sceptre",
    "Ankh",
    "Talisman",
    "Orb",
    "Gammel",
    "Ornament",
    "Brocade",
    "Galoon",
    "Bijou",
    "Spangle",
    "Gimcrack",
    "Hood",
    "Vulpeculum",
]

ITEM_ATTRIB = [
    "Golden",
    "Gilded",
    "Spectral",
    "Astral",
    "Garlanded",
    "Precious",
    "Crafted",
    "Dual",
    "Filigreed",
    "Cruciate",
    "Arcane",
    "Blessed",
    "Reverential",
    "Lucky",
    "Enchanted",
    "Gleaming",
    "Grandiose",
    "Sacred",
    "Legendary",
    "Mythic",
    "Crystalline",
    "Austere",
    "Ostentatious",
    "One True",
    "Proverbial",
    "Fearsome",
    "Deadly",
    "Benevolent",
    "Unearthly",
    "Magnificent",
    "Iron",
    "Ormolu",
    "Puissant",
]

ITEM_OFS = [
    "Foreboding",
    "Foreshadowing",
    "Nervousness",
    "Happiness",
    "Torpor",
    "Danger",
    "Craft",
    "Silence",
    "Invisibility",
    "Rapidity",
    "Pleasure",
    "Practicality",
    "Hurting",
    "Joy",
    "Petulance",
    "Intrusion",
    "Chaos",
    "Suffering",
    "Extroversion",
    "Frenzy",
    "Sisu",
    "Solitude",
    "Punctuality",
    "Efficiency",
    "Comfort",
    "Patience",
    "Internment",
    "Incarceration",
    "Misapprehension",
    "Loyalty",
    "Envy",
    "Acrimony",
    "Worry",
    "Fear",
    "Awe",
    "Guile",
    "Prurience",
    "Fortune",
    "Perspicacity",
    "Domination",
    "Submission",
    "Fealty",
    "Hunger",
    "Despair",
    "Cruelty",
    "Grob",
    "Dignard",
    "Ra",
    "the Bone",
    "Diamonique",
    "Electrum",
    "Hydragyrum",
]

BORING_ITEMS = [
    "nail",
    "lunchpail",
    "sock",
    "I.O.U.",
    "cookie",
    "pint",
    "toothpick",
    "writ",
    "newspaper",
    "letter",
    "plank",
    "hat",
    "egg",
    "coin",
    "needle",
    "bucket",
    "ladder",
    "chicken",
    "twig",
    "dirtclod",
    "counterpane",
    "vest",
    "teratoma",
    "bunny",
    "rock",
    "pole",
    "carrot",
    "canoe",
    "inkwell",
    "hoe",
    "bandage",
    "trowel",
    "towel",
    "planter box",
    "anvil",
    "axle",
    "tuppence",
    "casket",
    "nosegay",
    "trinket",
    "credenza",
    "writ",
]


@dataclass
class Monster:
    name: str
    level: int
    item: T.Optional[str]


MONSTERS = [
    Monster("Anhkheg", 6, "chitin"),
    Monster("Ant", 0, "antenna"),
    Monster("Ape", 4, "ass"),
    Monster("Baluchitherium", 14, "ear"),
    Monster("Beholder", 10, "eyestalk"),
    Monster("Black Pudding", 10, "saliva"),
    Monster("Blink Dog", 4, "eyelid"),
    Monster("Cub Scout", 1, "neckerchief"),
    Monster("Girl Scout", 2, "cookie"),
    Monster("Boy Scout", 3, "merit badge"),
    Monster("Eagle Scout", 4, "merit badge"),
    Monster("Bugbear", 3, "skin"),
    Monster("Bugboar", 3, "tusk"),
    Monster("Boogie", 3, "slime"),
    Monster("Camel", 2, "hump"),
    Monster("Carrion Crawler", 3, "egg"),
    Monster("Catoblepas", 6, "neck"),
    Monster("Centaur", 4, "rib"),
    Monster("Centipede", 0, "leg"),
    Monster("Cockatrice", 5, "wattle"),
    Monster("Couatl", 9, "wing"),
    Monster("Crayfish", 0, "antenna"),
    Monster("Demogorgon", 53, "tentacle"),
    Monster("Jubilex", 17, "gel"),
    Monster("Manes", 1, "tooth"),
    Monster("Orcus", 27, "wand"),
    Monster("Succubus", 6, "bra"),
    Monster("Vrock", 8, "neck"),
    Monster("Hezrou", 9, "leg"),
    Monster("Glabrezu", 10, "collar"),
    Monster("Nalfeshnee", 11, "tusk"),
    Monster("Marilith", 7, "arm"),
    Monster("Balor", 8, "whip"),
    Monster("Yeenoghu", 25, "flail"),
    Monster("Asmodeus", 52, "leathers"),
    Monster("Baalzebul", 43, "pants"),
    Monster("Barbed Devil", 8, "flame"),
    Monster("Bone Devil", 9, "hook"),
    Monster("Dispater", 30, "matches"),
    Monster("Erinyes", 6, "thong"),
    Monster("Geryon", 30, "cornucopia"),
    Monster("Malebranche", 5, "fork"),
    Monster("Ice Devil", 11, "snow"),
    Monster("Lemure", 3, "blob"),
    Monster("Pit Fiend", 13, "seed"),
    Monster("Ankylosaurus", 9, "tail"),
    Monster("Brontosaurus", 30, "brain"),
    Monster("Diplodocus", 24, "fin"),
    Monster("Elasmosaurus", 15, "neck"),
    Monster("Gorgosaurus", 13, "arm"),
    Monster("Iguanadon", 6, "thumb"),
    Monster("Megalosaurus", 12, "jaw"),
    Monster("Monoclonius", 8, "horn"),
    Monster("Pentasaurus", 12, "head"),
    Monster("Stegosaurus", 18, "plate"),
    Monster("Triceratops", 16, "horn"),
    Monster("Tyrannosaurus Rex", 18, "forearm"),
    Monster("Djinn", 7, "lamp"),
    Monster("Doppelganger", 4, "face"),
    Monster("Black Dragon", 7, None),
    Monster("Plaid Dragon", 7, "sporrin"),
    Monster("Blue Dragon", 9, None),
    Monster("Beige Dragon", 9, None),
    Monster("Brass Dragon", 7, "pole"),
    Monster("Tin Dragon", 8, None),
    Monster("Bronze Dragon", 9, "medal"),
    Monster("Chromatic Dragon", 16, "scale"),
    Monster("Copper Dragon", 8, "loafer"),
    Monster("Gold Dragon", 8, "filling"),
    Monster("Green Dragon", 8, None),
    Monster("Platinum Dragon", 21, None),
    Monster("Red Dragon", 10, "cocktail"),
    Monster("Silver Dragon", 10, None),
    Monster("White Dragon", 6, "tooth"),
    Monster("Dragon Turtle", 13, "shell"),
    Monster("Dryad", 2, "acorn"),
    Monster("Dwarf", 1, "drawers"),
    Monster("Eel", 2, "sashimi"),
    Monster("Efreet", 10, "cinder"),
    Monster("Sand Elemental", 8, "glass"),
    Monster("Bacon Elemental", 10, "bit"),
    Monster("Porn Elemental", 12, "lube"),
    Monster("Cheese Elemental", 14, "curd"),
    Monster("Hair Elemental", 16, "follicle"),
    Monster("Swamp Elf", 1, "lilypad"),
    Monster("Brown Elf", 1, "tusk"),
    Monster("Sea Elf", 1, "jerkin"),
    Monster("Ettin", 10, "fur"),
    Monster("Frog", 0, "leg"),
    Monster("Violet Fungi", 3, "spore"),
    Monster("Gargoyle", 4, "gravel"),
    Monster("Gelatinous Cube", 4, "jam"),
    Monster("Ghast", 4, "vomit"),
    Monster("Ghost", 10, None),
    Monster("Ghoul", 2, "muscle"),
    Monster("Humidity Giant", 12, "drops"),
    Monster("Beef Giant", 11, "steak"),
    Monster("Quartz Giant", 10, "crystal"),
    Monster("Porcelain Giant", 9, "fixture"),
    Monster("Rice Giant", 8, "grain"),
    Monster("Cloud Giant", 12, "condensation"),
    Monster("Fire Giant", 11, "cigarettes"),
    Monster("Frost Giant", 10, "snowman"),
    Monster("Hill Giant", 8, "corpse"),
    Monster("Stone Giant", 9, "hatchling"),
    Monster("Storm Giant", 15, "barometer"),
    Monster("Mini Giant", 4, "pompadour"),
    Monster("Gnoll", 2, "collar"),
    Monster("Gnome", 1, "hat"),
    Monster("Goblin", 1, "ear"),
    Monster("Grid Bug", 1, "carapace"),
    Monster("Jellyrock", 9, "seedling"),
    Monster("Beer Golem", 15, "foam"),
    Monster("Oxygen Golem", 17, "platelet"),
    Monster("Cardboard Golem", 14, "recycling"),
    Monster("Rubber Golem", 16, "ball"),
    Monster("Leather Golem", 15, "fob"),
    Monster("Gorgon", 8, "testicle"),
    Monster("Gray Ooze", 3, "gravy"),
    Monster("Green Slime", 2, "sample"),
    Monster("Griffon", 7, "nest"),
    Monster("Banshee", 7, "larynx"),
    Monster("Harpy", 3, "mascara"),
    Monster("Hell Hound", 5, "tongue"),
    Monster("Hippocampus", 4, "mane"),
    Monster("Hippogriff", 3, "egg"),
    Monster("Hobgoblin", 1, "patella"),
    Monster("Homunculus", 2, "fluid"),
    Monster("Hydra", 8, "gyrum"),
    Monster("Imp", 2, "tail"),
    Monster("Invisible Stalker", 8, None),
    Monster("Iron Peasant", 3, "chaff"),
    Monster("Jumpskin", 3, "shin"),
    Monster("Kobold", 1, "penis"),
    Monster("Leprechaun", 1, "wallet"),
    Monster("Leucrotta", 6, "hoof"),
    Monster("Lich", 11, "crown"),
    Monster("Lizard Man", 2, "tail"),
    Monster("Lurker", 10, "sac"),
    Monster("Manticore", 6, "spike"),
    Monster("Mastodon", 12, "tusk"),
    Monster("Medusa", 6, "eye"),
    Monster("Multicell", 2, "dendrite"),
    Monster("Pirate", 1, "booty"),
    Monster("Berserker", 1, "shirt"),
    Monster("Caveman", 2, "club"),
    Monster("Dervish", 1, "robe"),
    Monster("Merman", 1, "trident"),
    Monster("Mermaid", 1, "gills"),
    Monster("Mimic", 9, "hinge"),
    Monster("Mind Flayer", 8, "tentacle"),
    Monster("Minotaur", 6, "map"),
    Monster("Yellow Mold", 1, "spore"),
    Monster("Morkoth", 7, "teeth"),
    Monster("Mummy", 6, "gauze"),
    Monster("Naga", 9, "rattle"),
    Monster("Nebbish", 1, "belly"),
    Monster("Neo-Otyugh", 11, "organ "),
    Monster("Nixie", 1, "webbing"),
    Monster("Nymph", 3, "hanky"),
    Monster("Ochre Jelly", 6, "nucleus"),
    Monster("Octopus", 2, "beak"),
    Monster("Ogre", 4, "talon"),
    Monster("Ogre Mage", 5, "apparel"),
    Monster("Orc", 1, "snout"),
    Monster("Otyugh", 7, "organ"),
    Monster("Owlbear", 5, "feather"),
    Monster("Pegasus", 4, "aileron"),
    Monster("Peryton", 4, "antler"),
    Monster("Piercer", 3, "tip"),
    Monster("Pixie", 1, "dust"),
    Monster("Man-o-war", 3, "tentacle"),
    Monster("Purple Worm", 15, "dung"),
    Monster("Quasit", 3, "tail"),
    Monster("Rakshasa", 7, "pajamas"),
    Monster("Rat", 0, "tail"),
    Monster("Remorhaz", 11, "protrusion"),
    Monster("Roc", 18, "wing"),
    Monster("Roper", 11, "twine"),
    Monster("Rot Grub", 1, "eggsac"),
    Monster("Rust Monster", 5, "shavings"),
    Monster("Satyr", 5, "hoof"),
    Monster("Sea Hag", 3, "wart"),
    Monster("Silkie", 3, "fur"),
    Monster("Shadow", 3, "silhouette"),
    Monster("Shambling Mound", 10, "mulch"),
    Monster("Shedu", 9, "hoof"),
    Monster("Shrieker", 3, "stalk"),
    Monster("Skeleton", 1, "clavicle"),
    Monster("Spectre", 7, "vestige"),
    Monster("Sphinx", 10, "paw"),
    Monster("Spider", 0, "web"),
    Monster("Sprite", 1, "can"),
    Monster("Stirge", 1, "proboscis"),
    Monster("Stun Bear", 5, "tooth"),
    Monster("Stun Worm", 2, "trode"),
    Monster("Su-monster", 5, "tail"),
    Monster("Sylph", 3, "thigh"),
    Monster("Titan", 20, "sandal"),
    Monster("Trapper", 12, "shag"),
    Monster("Treant", 10, "acorn"),
    Monster("Triton", 3, "scale"),
    Monster("Troglodyte", 2, "tail"),
    Monster("Troll", 6, "hide"),
    Monster("Umber Hulk", 8, "claw"),
    Monster("Unicorn", 4, "blood"),
    Monster("Vampire", 8, "pancreas"),
    Monster("Wight", 4, "lung"),
    Monster("Will-o'-the-Wisp", 9, "wisp"),
    Monster("Wraith", 5, "finger"),
    Monster("Wyvern", 7, "wing"),
    Monster("Xorn", 7, "jaw"),
    Monster("Yeti", 4, "fur"),
    Monster("Zombie", 2, "forehead"),
    Monster("Wasp", 0, "stinger"),
    Monster("Rat", 1, "tail"),
    Monster("Bunny", 0, "ear"),
    Monster("Moth", 0, "dust"),
    Monster("Beagle", 0, "collar"),
    Monster("Midge", 0, "corpse"),
    Monster("Ostrich", 1, "beak"),
    Monster("Billy Goat", 1, "beard"),
    Monster("Bat", 1, "wing"),
    Monster("Koala", 2, "heart"),
    Monster("Wolf", 2, "paw"),
    Monster("Whippet", 2, "collar"),
    Monster("Uruk", 2, "boot"),
    Monster("Poroid", 4, "node"),
    Monster("Moakum", 8, "frenum"),
    Monster("Fly", 0, None),
    Monster("Hogbird", 3, "curl"),
    Monster("Wolog", 4, "lemma"),
]


@dataclass
class Race:
    name: str
    attr: T.List[StatType]


RACES = [
    Race("Half Orc", [StatType.hp_max]),
    Race("Half Man", [StatType.charisma]),
    Race("Half Halfling", [StatType.dexterity]),
    Race("Double Hobbit", [StatType.strength]),
    Race("Hob-Hobbit", [StatType.dexterity, StatType.condition]),
    Race("Low Elf", [StatType.condition]),
    Race("Dung Elf", [StatType.wisdom]),
    Race("Talking Pony", [StatType.mp_max, StatType.intelligence]),
    Race("Gyrognome", [StatType.dexterity]),
    Race("Lesser Dwarf", [StatType.condition]),
    Race("Crested Dwarf", [StatType.charisma]),
    Race("Eel Man", [StatType.dexterity]),
    Race("Panda Man", [StatType.condition, StatType.strength]),
    Race("Trans-Kobold", [StatType.wisdom]),
    Race("Enchanted Motorcycle", [StatType.mp_max]),
    Race("Will o' the Wisp", [StatType.wisdom]),
    Race("Battle-Finch", [StatType.dexterity, StatType.intelligence]),
    Race("Double Wookiee", [StatType.strength]),
    Race("Skraeling", [StatType.wisdom]),
    Race("Demicanadian", [StatType.condition]),
    Race("Land Squid", [StatType.strength, StatType.hp_max]),
]


@dataclass
class Class:
    name: str
    attr: T.List[StatType]


CLASSES = [
    Class("Ur-Paladin", [StatType.wisdom, StatType.condition]),
    Class("Voodoo Princess", [StatType.intelligence, StatType.charisma]),
    Class("Robot Monk", [StatType.strength]),
    Class("Mu-Fu Monk", [StatType.dexterity]),
    Class("Mage Illusioner", [StatType.intelligence, StatType.mp_max]),
    Class("Shiv-Knight", [StatType.dexterity]),
    Class("Inner Mason", [StatType.condition]),
    Class("Fighter/Organist", [StatType.charisma, StatType.strength]),
    Class("Puma Burgular", [StatType.dexterity]),
    Class("Runeloremaster", [StatType.wisdom]),
    Class("Hunter Strangler", [StatType.dexterity, StatType.intelligence]),
    Class("Battle-Felon", [StatType.strength]),
    Class("Tickle-Mimic", [StatType.wisdom, StatType.intelligence]),
    Class("Slow Poisoner", [StatType.condition]),
    Class("Bastard Lunatic", [StatType.condition]),
    Class("Lowling", [StatType.wisdom]),
    Class("Birdrider", [StatType.wisdom]),
    Class("Vermineer", [StatType.intelligence]),
]

TITLES = [
    "Mr.",
    "Mrs.",
    "Sir",
    "Sgt.",
    "Ms.",
    "Captain",
    "Chief",
    "Admiral",
    "Saint",
]

IMPRESSIVE_TITLES = [
    "King",
    "Queen",
    "Lord",
    "Lady",
    "Viceroy",
    "Mayor",
    "Prince",
    "Princess",
    "Chief",
    "Boss",
    "Archbishop",
]
